import tkinter as tk
from tkinter import colorchooser   #从tk模块中导入颜色选择器
from pixelgrid import PixelGrid


# 像素画板的主类
class PixelArtApp:
    """像素画板的主类程序"""
    def __init__(self,root):   #初始化并传入根窗口
        self.root = root       #root属性（根窗口）
        self.root.title("像素画板")   #设置窗口标题
        self.root.geometry("800x600")   #设置窗口的宽高
        #设置窗口左下角初始的颜色值
        self.colors = ["#FFFFFF", "#FF0000", "#00FF00",
                       "#0000FF", "#FFFF00", "#FF00FF",
                       "#00FFFF", "#000000"]
        self.selected_color = "#FF0000"
        #设置窗口的控制面板
        self.control_frame = tk.Frame(self.root)
        #设置控制面板的放置位置和边距
        self.control_frame.pack(fill=tk.X, padx=10, pady=10)
        #调用创建颜色按钮的方法
        self.create_color_buttons()
        #创建自定义颜色按钮的方法
        self.create_other_buttons()
        #创建像素网格：（使用PixelGrid）
        self.pixel_grid = PixelGrid(
            self.root,        #根窗口
            grid_size=20,     #网格尺寸
            cell_size=25,     #单元格尺寸
            padding=50        #边距
        )
        #将像素网格分散对齐
        self.pixel_grid.pack(fill=tk.BOTH,expand=True)
    #自定义方法
    def create_color_buttons(self):
        """创建颜色按钮的方法"""
        for color in self.colors:
            btn =  tk.Button(
                self.control_frame,
                bg=color,width=2,
                command=lambda c=color:self.select_color(c)
            )
            btn.pack(side=tk.LEFT,padx=2)
    def create_other_buttons(self):
        """创建自定义颜色按钮的方法"""
        custom_btn = tk.Button(
            self.control_frame,
            text="自定义颜色",
            command=self.choose_custom_color
        )
        custom_btn.pack(side=tk.LEFT,padx=10)
        clear_btn = tk.Button(
            self.control_frame,
            text="清空画布",
            command=self.clear_canvas
        )
        clear_btn.pack(side=tk.RIGHT, padx=10)
    def select_color(self,color):
        """设置选择颜色的方法"""
        self.pixel_grid.set_color(color)
    def choose_custom_color(self):
        """选择自定义颜色的方法"""
        color = colorchooser.askcolor()[1]
        if color:      #如果颜色存在则设置为当前颜色
            self.pixel_grid.set_color(color)
    def clear_canvas(self):
        """清空画布的方法"""
        #利用PixelGrid清空
        self.pixel_grid.clear_grid()